package pe.com.bbva.targps.bo.impl;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import pe.com.bbva.targps.bo.TarjetaBO;
import pe.com.bbva.targps.dao.TarjetaDAO;
import pe.com.bbva.targps.domain.Tarjeta;
import pe.com.bbva.targps.domain.TarjetaActualizada;
import pe.com.bbva.targps.domain.TarjetaFechaGPS;
import pe.com.stefanini.core.bo.GenericBOImpl;
import pe.com.stefanini.core.bo.Grid;
import pe.com.stefanini.core.exceptions.BOException;
import pe.com.stefanini.core.exceptions.DAOException;

@Service("tarjetaBO")
@SuppressWarnings({"rawtypes","unchecked"})
public class TarjetaBOImpl extends GenericBOImpl implements TarjetaBO{
	
	@Resource 
	private TarjetaDAO tarjetaDAO;
	
	public Tarjeta findById(Long id) throws BOException {
		Tarjeta tarjeta = (Tarjeta) super.findById(Tarjeta.class, id);
		return tarjeta;
	}

	public List<Tarjeta> findTarjetas(Tarjeta tarjeta)
			throws BOException, DAOException {
		List<Tarjeta> listaTarjetas = tarjetaDAO.findTarjetas(tarjeta);
		return listaTarjetas;
	}
	
	public List<Tarjeta> findTarjetasRango(Tarjeta tarjeta, String fechaInicio, String fechaFin)throws BOException, DAOException{
		List<Tarjeta> listaTarjetas = tarjetaDAO.findTarjetasRango(tarjeta, fechaInicio, fechaFin);
		return listaTarjetas;
	}

	public boolean validate(Tarjeta tarjeta) throws BOException{
		return true;
	}
	
	@Override
	public Grid<TarjetaActualizada> findToGrid(List<TarjetaActualizada> tarjetas, String order, int page, int rows)
	throws BOException, DAOException {
		String where="where ";
	    return super.findToGridList(tarjetas, where, " order by "+order,page,rows);
	}
	
	@Override
	public Grid<TarjetaActualizada> findToGridRango(List<TarjetaActualizada> tarjetas, String order, int page, int rows)
	throws BOException, DAOException {
		String where="where ";
	    return super.findToGridList(tarjetas, where, " order by "+order,page,rows);
	}
	
	@Transactional(propagation=Propagation.REQUIRED)
	public void save(Tarjeta tarjeta) throws BOException, DAOException {
		super.save(tarjeta);
	}
	
	public void update(Tarjeta tarjeta) throws BOException {			
		List parametros = new ArrayList();
		parametros.add(tarjeta.getEstado());
		parametros.add(tarjeta.getId());
		super.executeNamedQuery("updateEstadoTarjeta", parametros);
	}
	
	@Transactional(propagation=Propagation.REQUIRED , rollbackFor ={BOException.class})
	public Long  ValidaCargaEnProceso() throws BOException {
		Long idArchivo = 0L;		
		try {
			idArchivo = tarjetaDAO.ValidaCargaEnProceso();
		} catch (DAOException e) {
			e.printStackTrace();
			throw new BOException(e.getMessage());
		}
		return idArchivo;
	}

	public void delete(Tarjeta tarjeta) throws BOException {
		super.delete(tarjeta);
	}
	
	public List<TarjetaFechaGPS> findTarjetasGPS(Tarjeta tarjeta)throws BOException, DAOException{
		return tarjetaDAO.findTarjetasGPS(tarjeta);
	}
}